package com.browsesoft.resource;

import java.util.List;

import org.w3c.dom.Element;

import com.browsesoft.ExtendElement;
import com.browsesoft.htmlcomponent.HTMLBasicComponent;
import com.browsesoft.htmlcomponent.HTMLTreeComponent;
import com.browsesoft.htmlcomponent.HTMLTreeModel;

/**
 * 资源树，可以根据类型显示不同的树节点
 */
public class ResourceTreeComponent extends HTMLTreeComponent {
	/**
	 * 构造器
	 * 
	 * @param parent
	 *            组件的父组件
	 * @throws Exception
	 */
	public ResourceTreeComponent(HTMLBasicComponent parent) throws Exception {
		super(parent);
	}

	/**
	 * 取单个节点，没有，抛出异常
	 */
	private Element getElement(Element e, String tag, String key, String value) {
		List l = ExtendElement.findElementsByTagName(e, tag, key, value);
		if (l.size() < 1) {
			throw new RuntimeException("找不到节点：<" + tag + " " + key + "="
					+ value);
		}
		// 有多个，取第一个
		return (Element) l.get(0);
	}

	/**
	 * 得到要复制的节点
	 */
	protected Element getTreeNode(Object modelNode) throws Exception {
		String type = "";
		if (modelNode instanceof Resource) {
			type = ((Resource) modelNode).getType();
		} else if (modelNode instanceof RightNode) {
			type = ((RightNode) modelNode).getType();
		}
		// 如果是扩展节点
		if (isExpanded(modelNode)) {
			// 如果是选中的
			if (((HTMLTreeModel) model).getID(modelNode).equals(selectedID)) {
				return getElement(descriptionElement, "curexpand", "type", type);
			}
			// 否则，不是选中的
			else {
				return getElement(descriptionElement, "expand", "type", type);
			}
		}
		// 否则，不是叶子
		else if (((HTMLTreeModel) model).getChildNodes(modelNode).size() > 0) {
			// 如果是选中的
			if (((HTMLTreeModel) model).getID(modelNode).equals(selectedID)) {
				return getElement(descriptionElement, "curunexpand", "type",
						type);
			}
			// 否则，不是选中的
			else {
				// 找到对应元素
				return getElement(descriptionElement, "unexpand", "type", type);
			}
		}
		// 否则，是叶子
		else {
			// 如果是选中的
			if (((HTMLTreeModel) model).getID(modelNode).equals(selectedID)) {
				return getElement(descriptionElement, "curleaf", "type", type);
			}
			// 否则，不是选中的
			else {
				return getElement(descriptionElement, "leaf", "type", type);
			}
		}
	}

	/**
	 * 设置内容节点属性
	 * 
	 * @param nodeLink
	 *            内容节点
	 * @param node
	 *            内容节点的父亲节点
	 * @param modelNode
	 *            对应的model
	 */
	protected void setContextNode(Element nodeLink, Element node,
			Object modelNode) throws Exception {
		super.setContextNode(nodeLink, node, modelNode);
		// 设置内容节点ID
		String link = nodeLink.getAttribute("onclick");
		// 替换ID
		String id = ((HTMLTreeModel) model).getID(modelNode);
		link = link.replaceFirst("selectedid", id);
		// 如果有GI标记
		if (nodeLink.hasAttribute("forum")) {
			String state = (String) ((Resource) modelNode).getAttributes().get(
					"f_state");
			if (state != null && state.equals("关闭")) {
				link = link.replaceAll("板块维护模板", "板块关闭模板");
				link = link.replaceAll("主题维护模板", "板块关闭模板");
			}
		}
		nodeLink.setAttribute("onclick", link);
	}
}